// 导入 Vue 中的 Ref 和 InjectionKey 类型
import type { Ref, InjectionKey } from "vue";

// 定义 NameType 类型，表示名称的类型可以是字符串或数字
export type NameType = string | number;

// 定义 CollapseProps 接口，表示 Collapse 组件的属性
export interface CollapseProps {
  modelValue: NameType[]; // 当前激活的项的名称数组（使用 v-model 绑定）
  accordion?: boolean; // 是否开启手风琴模式（同时只能展开一个项）
}

// 定义 CollapseItemProps 接口，表示 CollapseItem 组件的属性
export interface CollapseItemProps {
  name: NameType; // 当前项的唯一标识（名称）
  title?: string; // 项的标题（可选）
  disabled?: boolean; // 是否禁用当前项（可选）
}

// 定义 CollapseContext 接口，表示 Collapse 组件的上下文对象
export interface CollapseContext {
  activeNames: Ref<NameType[]>; // 当前激活的项的名称数组（使用 Ref 包装）
  handleItemClick: (name: NameType) => void; // 处理项点击事件的函数
}

// 定义 CollapseEmits 接口，表示 Collapse 组件的事件
export interface CollapseEmits {
  // 'update:modelValue' 事件：当 modelValue 更新时触发
  (e: "update:modelValue", values: NameType[]): void;
  // 'change' 事件：当激活项发生变化时触发
  (e: "change", values: NameType[]): void;
}

// 定义一个唯一的 InjectionKey，用于在 Vue 的 provide/inject 中标识 CollapseContext
export const collapseContextKey: InjectionKey<CollapseContext> = Symbol("collapseContextKey");
